package com.njtech.pet.controller;

import com.alibaba.fastjson.JSON;
import com.njtech.pet.constant.Constant;
import com.njtech.pet.entity.Friend;
import com.njtech.pet.entity.User;
import com.njtech.pet.service.FriendService;
import com.njtech.pet.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Author:gm
 * Date:2020-03-22 19:23
 * Description:<描述>
 * @author gmisa
 */
@Controller
@RequestMapping("/friend")
public class FriendController {
    @Autowired
    FriendService friendService;
    @Autowired
    UserService userService;

    /*******************************************************8
     * 功能：请求方：按用户名查找用户（即查找有效状态的普通用户或会员）
     * @param username  用户名
     * @return          查找的用户信息
     * ---------------------------------------------------成功！
     */
    @RequestMapping(value={"/findFriend"})
    @ResponseBody
    public String findFriend(@RequestParam String username){
        if(username.equals("")||username==null){
            return null;
        }
        Map<String,Object> resultMap = new HashMap<>();
        User user = userService.findByName(username);
        // 查找有效用户
        String json;
        //判断该有效用户是不是普通用户或者会员
        if(user!=null){
            //有合适用户，则返回用户部分信息
            String role = user.getRole();
            System.out.println("role="+role);
            if("普通用户".equals(role) || "会员".equals(role)||role.startsWith("VIP")){
                json = JSON.toJSONString(user);
                return  json;
            }else{
                resultMap.put("msg","not_exist");
                json=JSON.toJSONString(resultMap);
            }
        }else{
            resultMap.put("msg","not_exist");
            json=JSON.toJSONString(resultMap);

        }
        return json;
    }

    /***************************************************************
     * 功能：发送好友请求，
     * @param fid  用户B fid
     * @return     提示信息
     * ------------------------------------------------------------成功！
     */
    @RequestMapping(value={"/sendRequest"})
    @ResponseBody
    public String sendRequest(Integer fid,HttpSession session){
        User user = (User)session.getAttribute("user");
        Integer uid = user.getId();
        if(fid==null){
            return null;
        }
        Map<String,Object> resultMap = new HashMap<>();
        resultMap.put("msg",friendService.sendRequest(uid,fid));
        return JSON.toJSONString(resultMap);
    }

    /*************************************
     * 功能：查看自己的好友
     * @return      用户集合
     * ----------------------------------成功！
     */
    @RequestMapping(value={"/selectAllFriend"})
    @ResponseBody
    public String lookRequest01(HttpSession session){
        User user = (User)session.getAttribute("user");
        List<Friend> list=new ArrayList<>();
        list = friendService.selectByUser(user, Constant.Friend.STATE_ACCEPTED.getValue(), null, null, "friendName asc");
        List<User> users = new ArrayList<>();
        for (Friend pp :
                list) {
            users.add(userService.selectByUserId(pp.friend.id));
        }
        //返回要查询的用户信息集合
        return JSON.toJSONString(list);
    }

    /*************************************************
     * 功能：拒绝好友请求
     * 对拒绝方：点击拒绝按钮，
     * 对被拒绝方，修改对应的数据状态由已发送--->已拒绝*
     * @param friendId  好友关系id
     * @return          提示消息
     * ---------------------------------------------成功！
     */
    @RequestMapping(value={"/refuseRequest"})
    @ResponseBody
    public String refuseRequest(@RequestParam Integer friendId){
        Map<String,Object> resultMap = new HashMap<>();
        if(friendId==null){
            return null;
        }
        //找到这条friend关系数据
        Friend friend = new Friend();
        friend.setId(friendId);
        friend.setState(Constant.Friend.STATE_REJECTED_UNREAD.getValue());

        //更改一条数据
        int flag = friendService.updateByFriendId(friend);
        if(flag==1){
            resultMap.put("msg","成功！");
        }else{
            resultMap.put("msg","失败");
        }
        return JSON.toJSONString(resultMap);
    }

    /************************************************
     * 功能：拒绝确认
     * 被拒绝方查看了被拒绝信心后，该数据会变为已拒绝，
     * 下一次查看拒绝信息将不会再出现这条
     * @param friendId  好友关系id
     * @return           提示信息
     * ------------------------------------------成功！
     */
    @RequestMapping("/refuseConfirm")
    @ResponseBody
    public String refuseConfirm(Integer friendId){
        System.out.println(friendId);
        Map<String,Object> resultMap = new HashMap<>();
        if(friendId==null){
            return null;
        }
        //找到这条friend关系数据
        Friend friend = new Friend();
        friend.setId(friendId);
        friend.setState(Constant.Friend.STATE_REJECTED.getValue());
        //更改一条数据
        int flag = friendService.updateByFriendId(friend);
        if(flag==1){
            resultMap.put("msg","成功！");
        }else{
            resultMap.put("msg","失败");
        }
        return JSON.toJSONString(resultMap);
    }

    /*********************************************
     * 功能：同意好友:两个操作
     *                 1.该一条数据状态
     *                 2.增添一条反向数据
     * @param friendId  好友关系id
     * @return          提示信息
     * ----------------------------------------成功！
     */
    @RequestMapping(value={"/acceptFriend"})
    @ResponseBody
    public String acceptFriend(@RequestParam Integer friendId,HttpSession session){
        User user = (User)session.getAttribute("user");
        Integer fid = user.getId();
        if(friendId==null||fid==null){
            return null;
        }
        System.out.println(friendId+"    "+fid);
        Map<String,Object> resultMap = new HashMap<>();
        resultMap.put("msg",friendService.acceptFriend(friendId,fid));
        return JSON.toJSONString(resultMap);
    }

    /**************************************************8
     * 功能：删除好友 改两条数据
     * @param friendId  好友关系id
     * @return          提示信息
     * --------------------------------------------成功！
     */
    @RequestMapping(value={"/deleteFriend"})
    @ResponseBody
    public String deleteFriend(Integer friendId,HttpSession session){
        User user = (User)session.getAttribute("user");
        Integer uid = user.getId();
        if(friendId==null){
            return null;
        }
        Map<String,Object> resultMap = new HashMap<>();
        resultMap.put("msg",friendService.deleteFriend(friendId,uid));
        Friend friend = friendService.selectByFriendId(friendId);
        resultMap.put("fid",friend.getFriend().getId());
        return JSON.toJSONString(resultMap);
    }

    /************************88
     * 好友请求相关的消息提示
     * @return 好友关系集
     * ----------------------成功
     */
    @RequestMapping(value={"/findTip"})
    @ResponseBody
    public String findTip(HttpSession session){
        User user = (User)session.getAttribute("user");
        Integer uid = user.getId();
        List<Friend>list =friendService.findTip(uid);
        return JSON.toJSONString(list);
    }

}
